package DataStructureAndAlgorithm.BaseAlgorithm.Sort.QuickSort;
import java.util.*;
public class quicksort_785 {
    //快排思想：分治
    /*
        基本步骤：
            1.确定分界点
            2.调整区间
            3.递归处理左右两段
     */
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int[] nums = new int[n];
        for (int i = 0 ; i < n; i ++){
            nums[i] = in.nextInt();
        }
        quick_sort(nums,0,n-1);
        for (int i = 0; i < n; i++){
            System.out.print(nums[i] + " ");
        }
        //System.out.print(Arrays.toString(nums));
    }
    static void quick_sort(int[] nums,int left,int right){
        if (left >= right)return;
        //left一定要对应j
        int x = nums[left];
        int i = left - 1;
        int j = right + 1;
        while (i < j){
            do{i++;}while(nums[i] < x);
            do{j--;}while(nums[j] > x);
            if (i < j){
                int temp = nums[i];
                nums[i] = nums[j];
                nums[j] = temp;
            }
        }
        quick_sort(nums,left,j);
        quick_sort(nums,j + 1,right);
    }

}
/*
给定你一个长度为 n

的整数数列。

请你使用快速排序对这个数列按照从小到大进行排序。

并将排好序的数列按顺序输出。
输入格式

输入共两行，第一行包含整数 n

。

第二行包含 n
个整数（所有整数均在 1∼109

范围内），表示整个数列。
输出格式

输出共一行，包含 n

个整数，表示排好序的数列。
数据范围

1≤n≤100000

输入样例：

5
3 1 2 4 5

输出样例：

1 2 3 4 5

 */